package org.xiangxji.snippets;

//import java.util.Date;
//import java.text.DateFormat;

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;

public class CallClient {
	@Test
	public void testRpcWebService() throws AxisFault { 
		//  使用RPC方式调用WebService        
		RPCServiceClient serviceClient = new RPCServiceClient();
		Options options = serviceClient.getOptions();
		//  指定调用WebService的URL
		String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl";
		EndpointReference targetEPR = new EndpointReference(endpoint);
		
		options.setAction("http://WebXml.com.cn/qqCheckOnline");
		options.setTo(targetEPR);
		//  指定getGreeting方法的参数值
		Object[] opAddEntryArgs = new Object[] {"285339111"};
		//  指定getGreeting方法返回值的数据类型的Class对象
		Class[] classes = new Class[] {String.class};
		//  指定要调用的getGreeting方法及WSDL文件的命名空间
		QName opAddEntry = new QName("http://WebXml.com.cn/", "qqCheckOnline");
		//  调用getGreeting方法并输出该方法的返回值
		Object[] result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);

		System.out.println(result[0].toString());
//		return result[0].toString();
	}

	public String testinvokeWebService(String url,String namespace, String methodCall,String[] params,String[] args) throws AxisFault {
		EndpointReference TARGET_EPR = new EndpointReference(url);
		ServiceClient sender = new ServiceClient();
		Options options = new Options();
		options.setAction(namespace + methodCall);
		options.setTo(TARGET_EPR);
		sender.setOptions(options);
		OMFactory factory = OMAbstractFactory.getOMFactory();
		OMNamespace omNs = null;
		if(StringUtils.isNotBlank(namespace)) {
			omNs = factory.createOMNamespace(
					namespace,
					"xsd");
		}
		OMElement method = factory.createOMElement(methodCall, omNs);
		for(int i=0;i<params.length;i++) {
			OMElement omelmt = factory.createOMElement(params[i], omNs);
			omelmt.addChild(factory.createOMText(omelmt, args[i]));
			method.addChild(omelmt);
		}
		Long s = System.currentTimeMillis();
		System.out.println(s);
		OMElement result = sender.sendReceive(method);
		System.out.println(System.currentTimeMillis()-s); 
		return result.getFirstElement().getText();
	}
	@Test
	public void testW() {
//		String url = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl";
		String url = "http://218.16.118.214/smsservice/smsinfo";
		//SMSCOUNT, new String[]{"mobile", "msgcontent"}, new String[]{mobile, msgcontent}
		try {
//			testinvokeWebService(url,"http://WebXml.com.cn/","qqCheckOnline",new String[]{"qqCode"},new String[]{"285339111"});
			String mobile = "15924168610";
			String msgcontent = "这是一条短信，不知道需要用几条发送，呵呵";
			System.out.println(testinvokeWebService(url,"http://service.taobao.com/","SmsCount",new String[]{"mobile", "msgcontent"}, new String[]{mobile, msgcontent}));
		} catch (AxisFault e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testQQ() {
		String namespace = "http://WebXml.com.cn/";
		String method = "qqCheckOnline";
		//webService的调用地址 
		String srvcUrl = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"; 
		//操作的命名空间+":"+操作名 
		QName qname = new QName(namespace, method);
//		QName pname = new QName(namespace, "qqCode");
		//传递的参数对象集 
		Object param[] = new Object[]{"285339111"};
		try { 
			//实例化远程服务调用客户端对象 
			RPCServiceClient client = new RPCServiceClient(); 
			//实例化Options对象 
			Options options = new Options(); 
			//设置Options对象的连接终端地址 
			options.setTo(new EndpointReference(srvcUrl)); 
			//设置Options对象的操作事件对象 
			options.setAction(namespace+method);
			//为远程服务调用客户端对象设置Options子对象 
			client.setOptions(options);
			//传递参数，调用服务，获取服务返回结果集 
			OMElement element = client.invokeBlocking(qname, param); 
			//获取返回结果集中第一条结果的返回内容 
			String result=element.getFirstElement().getText(); 
			//字符串转换为整型 
			System.out.println(result);
		} catch (AxisFault e) { 
			//捕捉异常 
			e.printStackTrace(); 
		}
	}
//    
//	@Test
//    public void testWSDL() {
//
//           try {
//                  String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl";
////                  String endpoint = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
//                  //直接引用远程的wsdl文件
//                 //以下都是套路 
//                  Service service = new Service();
//                  Call call = (Call) service.createCall();
//                  call.setTargetEndpointAddress(endpoint);
//                  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));//WSDL里面描述的接口名称
////                  call.setOperationName(new QName("http://WebXml.com.cn/","getWeatherbyCityName"));//WSDL里面描述的接口名称
//                  call.setUseSOAPAction(true);
//                  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline");
//                  
////                  call.addParameter(new QName("http://WebXml.com.cn/","theCityName"), org.apache.axis.encoding.XMLType.XSD_STRING,
////                                javax.xml.rpc.ParameterMode.IN);//接口的参数
//                  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING,
//                		  javax.xml.rpc.ParameterMode.IN);//接口的参数
//                  call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型  
//                  String temp = "149951682";
////                  String temp = "杭州";
//                  
//                  String result = (String)call.invoke(new Object[]{temp});
//                  //给方法传递参数，并且调用方法
//                  System.out.println("result is "+result);
//           }
//           catch (Exception e) {
//                  System.err.println(e.toString());
//           }
//    }
//	
//	@Test
//	public void testWSDL2() {
//		
//		try {  
//            String endpoint = "http://ls.cqu.edu.cn/WebService/LibraryInterface.asmx?WSDL";  
//            // 直接引用远程的wsdl文件  
//            // 以下都是套路  
//            Service service = new Service();  
//  
//            Call call = (Call) service.createCall();  
//            call.setTargetEndpointAddress(endpoint);  
//            call.setOperationName("SetLibraryValue");// WSDL里面描述的接口名称  
//  
//            call.setSOAPActionURI("http://ls.cqu.edu.cn/SetLibraryValue");  
//            call.addParameter("Key", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("XH", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("HJDM", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("BLSM", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("SetState", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("CZRID", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//            call.addParameter("LogIP", XMLType.XSD_STRING, ParameterMode.IN);// 接口的参数  
//  
//            call.setReturnType(XMLType.XSD_STRING);// 设置返回类型  
//  
//            String key = "ewfasdfdsafew23434";  
//            String xh = "22";  
//            String hjdm = "33";  
//            String blsm = "33";  
//            String ss = "33";  
//            String cid = "33";  
//            String ip = "33";  
//            String result = (String) call.invoke(new Object[] { key, xh, hjdm, blsm, ss, cid, ip });  
//  
//            // 给方法传递参数，并且调用方法  
//            System.out.println("result is " + result);  
//        } catch (Exception e) {  
//            System.err.println(e.toString());  
//        }  
//	}
	
//	public static String getService(String user) {
//       URL url = null;
//       try {
//           url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");
//       } catch (MalformedURLException mue) {
//          return mue.getMessage();
//         }
//             // This is the main SOAP object
//       Call soapCall = new Call();
//       // Use SOAP encoding
//       soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
//       // This is the remote object we're asking for the price
//       soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");
//       // This is the name of the method on the above object
//       soapCall.setMethodName("getUser");
//       // We need to send the ISBN number as an input parameter to the method
//       Vector soapParams = new Vector();
// 
//       // name, type, value, encoding style
//       Parameter isbnParam = new Parameter("userName", String.class, user, null);
//       soapParams.addElement(isbnParam);
//       soapCall.setParams(soapParams);
//       try {
//          // Invoke the remote method on the object
//          Response soapResponse = soapCall.invoke(url,"");
//          // Check to see if there is an error, return "N/A"
//          if (soapResponse.generatedFault()) {
//              Fault fault = soapResponse.getFault();
//             String f = fault.getFaultString();
//             return f;
//          } else {
//             // read result
//             Parameter soapResult = soapResponse.getReturnValue ();
//             // get a string from the result
//             return soapResult.getValue().toString();
//          }
//       } catch (SOAPException se) {
//          return se.getMessage();
//       }
//    }
}
